home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / basic / PureBasic_Upd.lha / PureBasic_Update1.60 / PureBasic / PureInclude / devices / cd.pb next >
Encoding:
Text File  |  2000-09-10  |  10.3 KB  |  320 lines

  1. ;
  2. ; ** $VER: cd.h 1.11 (12.8.93)
  3. ; ** Includes Release 40.15
  4. ; **
  5. ; ** cd.device include file
  6. ; **
  7. ; ** (C) Copyright 1992-1993 Commodore-Amiga, Inc.
  8. ; **     All Rights Reserved
  9. ;
  10. ; 05/02/2000
  11. ;   Added Union Support
  12. ;
  13.  
  14. IncludePath   "PureInclude:"
  15. XIncludeFile "exec/nodes.pb"
  16.  
  17.  
  18. ; *************************************************************************
  19. ;  *           *
  20. ;  *   CD Commands         *
  21. ;  *           *
  22. ;  *************************************************************************
  23.  
  24. #CD_RESET      = 1
  25. #CD_READ      = 2
  26. #CD_WRITE      = 3
  27. #CD_UPDATE      = 4
  28. #CD_CLEAR      = 5
  29. #CD_STOP      = 6
  30. #CD_START      = 7
  31. #CD_FLUSH      = 8
  32. #CD_MOTOR      = 9
  33. #CD_SEEK     = 10
  34. #CD_FORMAT     = 11
  35. #CD_REMOVE     = 12
  36. #CD_CHANGENUM     = 13
  37. #CD_CHANGESTATE     = 14
  38. #CD_PROTSTATUS     = 15
  39.  
  40. #CD_GETDRIVETYPE     = 18
  41. #CD_GETNUMTRACKS     = 19
  42. #CD_ADDCHANGEINT     = 20
  43. #CD_REMCHANGEINT     = 21
  44. #CD_GETGEOMETRY     = 22
  45. #CD_EJECT     = 23
  46.  
  47.  
  48. #CD_INFO     = 32
  49. #CD_CONFIG     = 33
  50. #CD_TOCMSF     = 34
  51. #CD_TOCLSN     = 35
  52.  
  53. #CD_READXL     = 36
  54.  
  55. #CD_PLAYTRACK     = 37
  56. #CD_PLAYMSF     = 38
  57. #CD_PLAYLSN     = 39
  58. #CD_PAUSE     = 40
  59. #CD_SEARCH     = 41
  60.  
  61. #CD_QCODEMSF     = 42
  62. #CD_QCODELSN     = 43
  63. #CD_ATTENUATE     = 44
  64.  
  65. #CD_ADDFRAMEINT     = 45
  66. #CD_REMFRAMEINT     = 46
  67.  
  68.  
  69. ; *************************************************************************
  70. ;  *           *
  71. ;  *   Device Driver Error Codes        *
  72. ;  *           *
  73. ;  *************************************************************************
  74.  
  75. #CDERR_OPENFAIL      = (-1) ;  device/unit failed to open
  76. #CDERR_ABORTED      = (-2) ;  request terminated early
  77. #CDERR_NOCMD      = (-3) ;  command not supported by device
  78. #CDERR_BADLENGTH      = (-4) ;  invalid length (IO_LENGTH/IO_OFFSET)
  79. #CDERR_BADADDRESS     = (-5) ;  invalid address (IO_DATA misaligned)
  80. #CDERR_UNITBUSY      = (-6) ;  device opens ok, but unit is busy
  81. #CDERR_SELFTEST      = (-7) ;  hardware failed self-test
  82.  
  83. #CDERR_NotSpecified   = 20   ;  general catchall
  84. #CDERR_NoSecHdr      = 21   ;  couldn't even find a sector
  85. #CDERR_BadSecPreamble = 22   ;  sector looked wrong
  86. #CDERR_BadSecID      = 23   ;  ditto
  87. #CDERR_BadHdrSum      = 24   ;  header had incorrect checksum
  88. #CDERR_BadSecSum      = 25   ;  data had incorrect checksum
  89. #CDERR_TooFewSecs     = 26   ;  couldn't find enough sectors
  90. #CDERR_BadSecHdr      = 27   ;  another "sector looked wrong"
  91. #CDERR_WriteProt      = 28   ;  can't write to a protected disk
  92. #CDERR_NoDisk      = 29   ;  no disk in the drive
  93. #CDERR_SeekError      = 30   ;  couldn't find track 0
  94. #CDERR_NoMem      = 31   ;  ran out of memory
  95. #CDERR_BadUnitNum     = 32   ;  asked for a unit > NUMUNITS
  96. #CDERR_BadDriveType   = 33   ;  not a drive cd.device understands
  97. #CDERR_DriveInUse     = 34   ;  someone else allocated the drive
  98. #CDERR_PostReset      = 35   ;  user hit reset; awaiting doom
  99. #CDERR_BadDataType    = 36   ;  data on disk is wrong type
  100. #CDERR_InvalidState   = 37   ;  invalid cmd under current conditions
  101.  
  102. #CDERR_Phase      = 42   ;  illegal or unexpected SCSI phase
  103. #CDERR_NoBoard      = 50   ;  open failed for non-existant board
  104.  
  105.  
  106.  
  107. ; *************************************************************************
  108. ;  *           *
  109. ;  * Configuration         *
  110. ;  *           *
  111. ;  *  The drive is configured by TagList items defined as follows:   *
  112. ;  *           *
  113. ;  *************************************************************************
  114.  
  115. #TAGCD_PLAYSPEED = $0001
  116. #TAGCD_READSPEED = $0002
  117. #TAGCD_READXLSPEED = $0003
  118. #TAGCD_SECTORSIZE = $0004
  119. #TAGCD_XLECC  = $0005
  120. #TAGCD_EJECTRESET = $0006
  121.  
  122.  
  123. ; *************************************************************************
  124. ;  *           *
  125. ;  * Information          *
  126. ;  *           *
  127. ;  * Information/Status structure describes current speed settings   *
  128. ;  * for read and play commands, sector size, audio attenuation   *
  129. ;  * precision, and drive status.       *
  130. ;  *           *
  131. ;  *************************************************************************
  132.  
  133. Structure CDInfo
  134.        ;           Default
  135.     PlaySpeed.w     ;  Audio play speed       (75)
  136.     ReadSpeed.w     ;  Data-rate of CD_READ command   (Max)
  137.     ReadXLSpeed.w    ;  Data-rate of CD_READXL command (75)
  138.     SectorSize.w     ;  Number of bytes per sector     (2048)
  139.     XLECC.w     ;  CDXL ECC enabled/disabled
  140.     EjectReset.w     ;  Reset on eject enabled/disabled
  141.     Reserved1.w[4]   ;  Reserved for future expansion
  142.  
  143.     MaxSpeed.w     ;  Maximum speed drive can handle (75, 150)
  144.     AudioPrecision.w ;  0 = no attenuator, 1 = mute only,
  145.        ;  other = (# levels - 1)
  146.     Status.w     ;  See flags below
  147.     Reserved2.w[4]   ;  Reserved for future expansion
  148. EndStructure
  149.  
  150.  
  151. ;  Flags for Status
  152.  
  153. #CDSTSB_CLOSED  = 0 ;  Drive door is closed
  154. #CDSTSB_DISK  = 1 ;  A disk has been detected
  155. #CDSTSB_SPIN  = 2 ;  Disk is spinning (motor is on)
  156. #CDSTSB_TOC  = 3 ;  Table of contents read.  Disk is valid.
  157. #CDSTSB_CDROM  = 4 ;  Track 1 contains CD-ROM data
  158. #CDSTSB_PLAYING  = 5 ;  Audio is playing
  159. #CDSTSB_PAUSED  = 6 ;  Pause mode (pauses on play command)
  160. #CDSTSB_SEARCH  = 7 ;  Search mode (Fast Forward/Fast Reverse)
  161. #CDSTSB_DIRECTION = 8 ;  Search direction (0 = Forward, 1 = Reverse)
  162.  
  163. #CDSTSF_CLOSED  = $0001
  164. #CDSTSF_DISK  = $0002
  165. #CDSTSF_SPIN  = $0004
  166. #CDSTSF_TOC  = $0008
  167. #CDSTSF_CDROM  = $0010
  168. #CDSTSF_PLAYING  = $0020
  169. #CDSTSF_PAUSED  = $0040
  170. #CDSTSF_SEARCH  = $0080
  171. #CDSTSF_DIRECTION = $0100
  172.  
  173.  
  174. ;  Modes for CD_SEARCH
  175.  
  176. #CDMODE_NORMAL = 0   ;  Normal play at current play speed
  177. #CDMODE_FFWD = 1   ;  Fast forward play (skip-play forward)
  178. #CDMODE_FREV = 2   ;  Fast reverse play (skip-play reverse)
  179.  
  180.  
  181. ; *************************************************************************
  182. ;  *           *
  183. ;  * Position Information        *
  184. ;  *           *
  185. ;  * Position information can be described in two forms: MSF and LSN   *
  186. ;  * form.  MSF (Minutes, Seconds, Frames) form is a time encoding.   *
  187. ;  * LSN (Logical Sector Number) form is frame (sector) count.   *
  188. ;  * The desired form is selected using the io_Flags field of the   *
  189. ;  * IOStdReq structure.  The flags and the union are described   *
  190. ;  * below.          *
  191. ;  *           *
  192. ;  *************************************************************************
  193.  
  194. Structure RMSF
  195.  
  196.     Reserved.b   ;  Reserved (always zero)
  197.     Minute.b     ;  Minutes (0-72ish)
  198.     Second.b     ;  Seconds (0-59)
  199.     Frame.b      ;  Frame   (0-74)
  200. EndStructure
  201.  
  202. Structure LSNMSF
  203.   StructureUnion
  204.     MSF.RMSF         ;  Minute, Second, Frame
  205.     LSN.l            ;  Logical Sector Number
  206.   EndStructureUnion
  207. EndStructure     
  208.  
  209.  
  210. ; *************************************************************************
  211. ;  *           *
  212. ;  * CD Transfer Lists         *
  213. ;  *           *
  214. ;  * A CDXL node is a double link node; however only single linkage   *
  215. ;  * is used by the device driver.  If you wish to construct a   *
  216. ;  * transfer list manually, it is only neccessary to define the   *
  217. ;  * mln_Succ pointer of the MinNode.  You may also use the Exec   *
  218. ;  * list functions by defining a List or MinList structure and by   *
  219. ;  * using the AddHead/AddTail functions to create the list.  This   *
  220. ;  * will create a double-linked list.  Although a double-linked   *
  221. ;  * list is not required by the device driver, you may wish use it   *
  222. ;  * for your own purposes. Don't forget to initialize the    *
  223. ;  * the List/MinList before using it!      *
  224. ;  *           *
  225. ;  *************************************************************************
  226.  
  227. Structure CDXL
  228.  
  229.   Node.MinNode        ;  double linkage
  230.  *Buffer.b        ;  data destination (word aligned)
  231.   Length.l        ;  must be even # bytes
  232.   Actual.l        ;  bytes transferred
  233.  *IntData.l        ;  interrupt server data segment
  234.  *IntCode.l    ;  interrupt server code entry
  235. EndStructure
  236.  
  237.  
  238. ; *************************************************************************
  239. ;  *           *
  240. ;  * CD Table of Contents        *
  241. ;  *           *
  242. ;  * The CD_TOC command returns an array of CDTOC entries.    *
  243. ;  * Entry zero contains summary information describing how many   *
  244. ;  * tracks the disk has and the play-time of the disk.    *
  245. ;  * Entries 1 through N (N = Number of tracks on disk) contain   *
  246. ;  * information about the track.       *
  247. ;  *           *
  248. ;  *************************************************************************
  249.  
  250. Structure TOCSummary
  251.  
  252.     FirstTrack.b    ;  First track on disk (always 1)
  253.     LastTrack.b     ;  Last track on disk
  254.     LeadOut.LSNMSF  ;  Beginning of lead-out track (end of disk)
  255. EndStructure
  256.  
  257.  
  258. Structure TOCEntry
  259.  
  260.     CtlAdr.b         ;  Q-Code info
  261.     Track.b          ;  Track number
  262.     Position.LSNMSF  ;  Start position of this track
  263. EndStructure
  264.  
  265.  
  266. Structure CDTOC
  267.   StructureUnion
  268.     Summary.TOCSummary ;  First entry (0) is summary information
  269.     Entry.TOCEntry     ;  Entries 1-N are track entries
  270.   EndStructureUnion
  271. EndStructure
  272.  
  273.  
  274.  
  275. ; *************************************************************************
  276. ;  *           *
  277. ;  * Q-Code Packets         *
  278. ;  *           *
  279. ;  * Q-Code packets are only returned when audio is playing.   *
  280. ;  * Currently, only position packets are returned (ADR_POSITION)   *
  281. ;  * The other ADR_ types are almost never encoded on the disk   *
  282. ;  * and are of little use anyway.  To avoid making the QCode   *
  283. ;  * structure a union, these other ADR_ structures are not defined.   *
  284. ;  *           *
  285. ;  *************************************************************************
  286.  
  287. Structure QCode
  288.  
  289.     CtlAdr.b             ;  Data type / QCode type
  290.     Track.b              ;  Track number
  291.     Index.b              ;  Track subindex number
  292.     Zero.b               ;  The "Zero" byte of Q-Code packet
  293.     TrackPosition.LSNMSF ;  Position from start of track
  294.     DiskPosition.LSNMSF  ;  Position from start of disk
  295. EndStructure
  296.  
  297.  
  298. #CTLADR_CTLMASK = $F0   ;  Control field
  299.  
  300. #CTL_CTLMASK    = $D0   ;  To be ANDed with CtlAdr before compared
  301.  
  302. #CTL_2AUD       = $00   ;  2 audio channels without preemphasis
  303. #CTL_2AUDEMPH   = $10   ;  2 audio channels with preemphasis
  304. #CTL_4AUD       = $80   ;  4 audio channels without preemphasis
  305. #CTL_4AUDEMPH   = $90   ;  4 audio channels with preemphasis
  306. #CTL_DATA       = $40   ;  CD-ROM Data
  307.  
  308. #CTL_COPYMASK   = $20   ;  To be ANDed with CtlAdr before compared
  309.  
  310. #CTL_COPY       = $20   ;  When true, this audio/data can be copied
  311.  
  312. #CTLADR_ADRMASK = $0F   ;  Address field
  313.  
  314. #ADR_POSITION   = $01   ;  Q-Code is position information
  315. #ADR_UPC        = $02   ;  Q-Code is UPC information (not used)
  316. #ADR_ISRC       = $03   ;  Q-Code is ISRC (not used)
  317. #ADR_HYBRID     = $05   ;  This disk is a hybrid disk
  318.  
  319.  
  320.